#pragma once

//#include "Includes.h"
//#include "Engine/RenderGlobals.h"
//#include "../Texture/Texture2D.h"
#include "IShader.h"

/*
 * ChangeFreq used only in dx10 and later versions
 */
class CVShader: public CIShader
{
protected:
    CVShader                           ( mString a_sFileName );    
    mString m_sFileName;

public:
    virtual ~CVShader                  ( );
    static CVShader *CreateVShader     ( mString );
    virtual mVoid Compile              ( ) = 0;
    virtual mVoid Bind                 ( ) = 0;
    /* adding constant into cbuffer */
    virtual mBool SendConstantValue    ( const std::string &a_sConstName, mVoid *a_pValue, size_t a_ValueSize, TChangeFreq a_ChangeFreq ) = 0;
    virtual mBool SendTexture          ( const std::string &a_sTextureName, CTexture2D *a_pTexture ) = 0;
    virtual size_t ShaderCodeSize      ( );
    virtual const mVoid *ShaderCode    ( );
};